import 'dart:convert';
import 'package:emoji_regex/emoji_regex.dart';
import 'CharType.dart';
import 'package:flutter/material.dart';

class CharTypeUtil {
  static int getCharType(String char) {
    if (isTaiYu(char)) {
      return CharType.CHAR_TYPE_TAIYU;
    } else if (isArabic(char)) {
      return CharType.CHAR_TYPE_ARABIC;
    } else if (isEmoji(char)) {
      return CharType.CHAR_TYPE_EMOJI;
    } else {
      return CharType.CHAR_TYPE_GENERAL;
    }
  }

  //判断是不是泰语
  static bool isTaiYu(String char) {
    return char.codeUnitAt(0) >= 0x0E00 && char.codeUnitAt(0) <= 0x0E7F;
  }

  //判断是不是日语
  static bool isJapanese(String char) {
    // 定义日语的 Unicode 范围
    final RegExp japaneseRegex = RegExp(
      r'[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF\u3400-\u4DBF\u20000-\u2A6DF\u2A700-\u2B73F\u2B740-\u2B81F\u2B820-\u2CEAF\uF900-\uFAFF\u2F800-\u2FA1F]',
    );
    return japaneseRegex.hasMatch(char);
  }

  //is Emoji
  static bool isEmoji(String char) {
    if (isCjkPunctuation(char)) {
      return false;
    }
    if (isJapanese(char)) {
      return false;
    }

    final regex = emojiRegex();
    final matches = regex.allMatches(char);
    if (matches.length > 0) {
      return true;
    }

    // 定义 Emoji 的 Unicode 范围
    final RegExp emojiRegexEz = RegExp(
      r'(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])',
    );
    return emojiRegexEz.hasMatch(char);
  }

  //是否是一些符号
  static bool isCjkPunctuation(String char) {
    final rune = char.runes.first;
    return (rune >= 0x3000 && rune <= 0x303F); // CJK 标点符号范围
  }

  //是否是中文
  bool isChinese(String char) {
    return RegExp(r'[\u4e00-\u9fa5]').hasMatch(char);
  }

  //判断是不是阿拉伯语
  static bool isArabic(String char) {
    return char.codeUnitAt(0) >= 0x0600 && char.codeUnitAt(0) <= 0x06FF;
  }
}
